import requests
from bs4 import BeautifulSoup
import sys
import re
from tensorflow import keras
from predictor import split_pic, analyse

# 识别验证码模型
model = keras.models.load_model('./model/Model_tf.net')

# 构造Session
session = requests.session()

# 设置请求头
headers_0 = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cache-Control': 'max-age=0',
    'Connection': 'keep-alive',
    # 'Cookie': 'safedog-flow-item=; ASP.NET_SessionId=' + self.cookies['ASP.NET_SessionId'],
    'Host': 'jwgl.gdust.edu.cn',
    'Referer': 'http://jwgl.gdust.edu.cn/default2.aspx',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36'
}


class Login:
    """模拟登录教务系统"""

    def __init__(self, xh, pw, url):
        """初始化参数"""
        self.xh = str(xh)
        self.pw = str(pw)
        # r = requests.get(url)
        # session = requests.session()
        # session.get(url)
        self.url_head = url
        # self.cookies = r.cookies.get_dict()
        # self.cookies = r.cookies
        # print(r.cookies.get_dict())

    @property
    def login_website(self):
        """模拟登录"""
        url_login = self.url_head + 'default2.aspx'  # 提交表单地址
        url_0 = self.url_head + 'xs_main.aspx?xh=' + self.xh  # 登陆后默认显示地址

        try:
            url_code = self.url_head + 'CheckCode.aspx?'
            pic = session.get(url_code, timeout=5)
            file_name = "./code/" + self.xh + ".gif"  # 拼接图片名

            print(file_name)
            # 将图片存入本地
            fp = open(file_name, 'wb')
            fp.write(pic.content)  # 写入图片
            fp.close()

            # 打开图片
            f1 = open(file_name, 'rb')

            # # 设置发送的文件
            # files = {'file': (file_name, f1, 'image/gif', {})}
            # 发送post
            # post = requests.post(url='http://127.0.0.1:5000/upload', files=files)

            code_result = analyse(f1.read(), model)
            code_result = ''.join(code_result)

            # 关闭文件
            f1.close()

            # 打印服务器返回的数据
            print(code_result)
            student = "学生"
            # 需要提交的表单
            data = {
                '__VIEWSTATE': 'dDw3OTkxMjIwNTU7Oz5vJ/yYUi9dD4fEnRUKesDFl8hEKA==',
                'TextBox1': self.xh,
                'TextBox2': self.pw,
                'TextBox3': code_result,
                'RadioButtonList1': student.encode("gb2312"),
                'Button1': ''
            }

            # 在Session中发送登录请求，此后这个session里就存储了cookie
            # 查看session
            # print(session.cookies.get_dict())

            # 登录，登录成功则返回首页，即可获取到姓名
            resp_index = session.post(url_login, headers=headers_0, data=data)
            bs_0 = BeautifulSoup(resp_index.text, 'lxml')
            list_index = bs_0.find(id='xhxm')
            if list_index is None:
                return '登录失败'
            xm = list_index.contents[0].split("同学")[0]
            return xm

        except Exception as e:
            print(e)
            return '登录失败'


            # 首页
            # resp = session.get(url_0, headers=headers_0)

            # 获取选课列表 =========================================================================================

    def get_xxk_list(self, xm):
        url_xxk = self.url_head + 'xf_xsqxxxk.aspx?xh=' + self.xh + '&xm=' + xm + '&gnmkdm=N1211005'
        resp_xxk = session.get(url_xxk, headers=headers_0)
        bs_xxk = BeautifulSoup(resp_xxk.text, 'lxml')
        tmp = bs_xxk.select('tr')

        """
        ['选课', '预订教材', '课程名称', '课程代码', '教师姓名', '上课时间', '上课地点', '学分', '周学时', '起始结束周', '容量', '已选', '余量', '备注', '课程归属',
        '课程性质', '校区代码', '组', '开课学院', '考试时间']

        table = {
            'id:':'选课id 0',
            'jc':'教材id 1',
            "courseName:":"课程名 2",
            "courseCode":"课程代码 3",
            "teacherName":"教师姓名 4",
            "courseTime":"上课时间 5",
            "coursePosition":"上课地点 6",
            "numOfPeople":'已选 11',
            "numOfFree":'余量 12'
            }
         """
        # 选修课列表
        xxkListTmp = []
        for item in tmp:
            td_tmp = item.findAll('td')
            for index, value in enumerate(td_tmp):
                a = value.find('input')
                if a is not None:
                    a = "<td>" + a['name'] + "</td>"
                    td_tmp[index] = a
                a = value.find('a')
                if a is not None:
                    a = "<td>" + a.string + "</td>"
                    td_tmp[index] = a
            td_tmp = str(td_tmp)
            td_tmp = re.findall('<td>(.*?)</td>', td_tmp)
            xxkListTmp.append(td_tmp)

        xxkList = []
        for item in xxkListTmp:
            xxk = {"id": item[0], "jc": item[1], "courseName": item[2], "courseCode": item[3],
                   "teacherName": item[4], "courseTime": item[5], "coursePosition": item[6],
                   "numOfPeople": item[11], "numOfFree": item[12]}
            xxkList.append(xxk)
        print(xxkList)

        # url_N121607 = self.url_head + 'pyjh.aspx?xh=' + self.xh + '&xm=' + xm + '&gnmkdm=N121607'

    # 抢课 kcmcGrid:_ctl3:xk ==================================================================================================================
    def post_xxk(self, xm):
        url_xxk = self.url_head + 'xf_xsqxxxk.aspx?xh=' + self.xh + '&xm=' + xm + '&gnmkdm=N1211005'
        strr = 'kcmcGrid:_ctl2999:xk'
        xxkData = {'__EVENTTARGET': '',
                   '__EVENTARGUMENT': '',
                   '__VIEWSTATE': 'dDwtNzY1ODgyNzY3O3Q8cDxsPGRxc3pqO3p5ZG07WEtYTjtYS1hROz47bDwyMDE4OzEwMDg7MjAyMC0yMDIxOzI7Pj47bDxpPDE+Oz47bDx0PDtsPGk8MT47aTwzPjtpPDU+O2k8Nz47aTw5PjtpPDExPjtpPDE5PjtpPDIxPjtpPDIzPjtpPDI3Pjs+O2w8dDxwPHA8bDxUZXh0Oz47bDzlp5PlkI3vvJrlvKDmlofmnYMmbmJzcFw7Jm5ic3BcOyZuYnNwXDsmbmJzcFw75a2m6Zmi77ya6K6h566X5py65a2m6ZmiJm5ic3BcOyZuYnNwXDsmbmJzcFw7Jm5ic3BcO+S4k+S4mu+8mui9r+S7tuW3peeoizs+Pjs+Ozs+O3Q8dDxwPHA8bDxEYXRhVGV4dEZpZWxkO0RhdGFWYWx1ZUZpZWxkOz47bDxrY3h6O2tjeHo7Pj47Pjt0PGk8Mj47QDzlhazlhbHpgInkv67or747XGU7PjtAPOWFrOWFsemAieS/ruivvjtcZTs+Pjs+Ozs+O3Q8dDw7cDxsPGk8MD47aTwxPjtpPDI+Oz47bDxwPOaciTvmnIk+O3A85pegO+aXoD47cDxcZTtcZT47Pj47bDxpPDA+Oz4+Ozs+O3Q8dDxwPHA8bDxEYXRhVGV4dEZpZWxkO0RhdGFWYWx1ZUZpZWxkOz47bDxrY2dzO2tjZ3M7Pj47Pjt0PGk8Mz47QDzkurrmlofnpL7np5HjgIHoibrmnK/nsbs76Ieq54S256eR5a2m57G7O1xlOz47QDzkurrmlofnpL7np5HjgIHoibrmnK/nsbs76Ieq54S256eR5a2m57G7O1xlOz4+O2w8aTwyPjs+Pjs7Pjt0PHQ8cDxwPGw8RGF0YVRleHRGaWVsZDtEYXRhVmFsdWVGaWVsZDs+O2w8c2tzajtza3NqOz4+Oz47dDxpPDU+O0A85ZGo5LiJ56ysNSw26IqCe+esrDMtMTflkah9O+WRqOS4ieesrDcsOOiKgnvnrKwzLTE35ZGofTvlkajkuInnrKw5LDEw6IqCe+esrDMtMTflkah9O+WRqOWbm+esrDksMTDoioJ756ysMy0xN+WRqH07XGU7PjtAPOWRqOS4ieesrDUsNuiKgnvnrKwzLTE35ZGofTvlkajkuInnrKw3LDjoioJ756ysMy0xN+WRqH075ZGo5LiJ56ysOSwxMOiKgnvnrKwzLTE35ZGofTvlkajlm5vnrKw5LDEw6IqCe+esrDMtMTflkah9O1xlOz4+O2w8aTw0Pjs+Pjs7Pjt0PHQ8cDxwPGw8RGF0YVRleHRGaWVsZDtEYXRhVmFsdWVGaWVsZDs+O2w8eHFtYzt4cWRtOz4+Oz47dDxpPDQ+O0A86ZuF5Zut5qCh5Yy6O+acrOmDqDvmiJDmlZk75p2+5bGx5rmWOz47QDwyOzE7Mzs0Oz4+O2w8aTwxPjs+Pjs7Pjt0PDtsPGk8MT47PjtsPHQ8QDA8Ozs7Ozs7Ozs7Oz47Oz47Pj47dDxAMDxwPHA8bDxQYWdlQ291bnQ7XyFJdGVtQ291bnQ7XyFEYXRhU291cmNlSXRlbUNvdW50O0RhdGFLZXlzOz47bDxpPDE+O2k8MTM+O2k8MTM+O2w8Pjs+Pjs+Ozs7Ozs7Ozs7Oz47bDxpPDA+Oz47bDx0PDtsPGk8MT47aTwyPjtpPDM+O2k8ND47aTw1PjtpPDY+O2k8Nz47aTw4PjtpPDk+O2k8MTA+O2k8MTE+O2k8MTI+O2k8MTM+Oz47bDx0PDtsPGk8Mj47aTwzPjtpPDQ+O2k8NT47aTw2PjtpPDc+O2k8OD47aTw5PjtpPDEwPjtpPDExPjtpPDEyPjtpPDEzPjtpPDE0PjtpPDE1PjtpPDE2PjtpPDE3PjtpPDE4PjtpPDE5PjtpPDIwPjtpPDIxPjtpPDIyPjtpPDIzPjtpPDI1Pjs+O2w8dDxwPHA8bDxUZXh0Oz47bDxcPGEgaHJlZj0nIycgb25jbGljaz0id2luZG93Lm9wZW4oJ2tjeHguYXNweD94aD0yMDE4MTMxMDAzJmtjZG09MTMxMjAwOSZ4a2toPSgyMDIwLTIwMjEtMiktMTMxMjAwOS0xMjAyMS0xJywna2N4eCcsJ3Rvb2xiYXI9MCxsb2NhdGlvbj0wLGRpcmVjdG9yaWVzPTAsc3RhdHVzPTAsbWVudWJhcj0wLHNjcm9sbGJhcnM9MSxyZXNpemFibGU9MCx3aWR0aD01NDAsaGVpZ2h0PTQ1MCxsZWZ0PTEyMCx0b3A9NjAnKSJcPuWQiOWUsVw8L2FcPjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTMxMjAwOTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8XDxhIGhyZWY9JyMnIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdqc3h4LmFzcHg/eGg9MjAxODEzMTAwMyZqc3pnaD0xMjAyMSZ4a2toPSgyMDIwLTIwMjEtMiktMTMxMjAwOS0xMjAyMS0xJywnanN4eCcsJ3Rvb2xiYXI9MCxsb2NhdGlvbj0wLGRpcmVjdG9yaWVzPTAsc3RhdHVzPTAsbWVudWJhcj0wLHNjcm9sbGJhcnM9MSxyZXNpemFibGU9MCx3aWR0aD01NDAsaGVpZ2h0PTQ1MCxsZWZ0PTEyMCx0b3A9NjAnKSJcPuS9meWuh1w8L2FcPjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85ZGo5LiJ56ysOSwxMOiKgnvnrKwzLTE35ZGofTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85belMi01MDQ7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Mi4wLTAuMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDMtMTc7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEyMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTExOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDw5Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwoMjAyMC0yMDIxLTIpLTEzMTIwMDktMTIwMjEtMTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTMxMjAwOTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTIwMjE7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOS6uuaWh+ekvuenkeOAgeiJuuacr+exuzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85YWs5YWx6YCJ5L+u6K++Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzmnKzpg6g7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWfuuehgOmDqDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+Oz4+O3Q8O2w8aTwyPjtpPDM+O2k8ND47aTw1PjtpPDY+O2k8Nz47aTw4PjtpPDk+O2k8MTA+O2k8MTE+O2k8MTI+O2k8MTM+O2k8MTQ+O2k8MTU+O2k8MTY+O2k8MTc+O2k8MTg+O2k8MTk+O2k8MjA+O2k8MjE+O2k8MjI+O2k8MjM+O2k8MjU+Oz47bDx0PHA8cDxsPFRleHQ7PjtsPFw8YSBocmVmPScjJyBvbmNsaWNrPSJ3aW5kb3cub3Blbigna2N4eC5hc3B4P3hoPTIwMTgxMzEwMDMma2NkbT0xMzEyMDQ4Jnhra2g9KDIwMjAtMjAyMS0yKS0xMzEyMDQ4LTA4MjY3LTEnLCdrY3h4JywndG9vbGJhcj0wLGxvY2F0aW9uPTAsZGlyZWN0b3JpZXM9MCxzdGF0dXM9MCxtZW51YmFyPTAsc2Nyb2xsYmFycz0xLHJlc2l6YWJsZT0wLHdpZHRoPTU0MCxoZWlnaHQ9NDUwLGxlZnQ9MTIwLHRvcD02MCcpIlw+5Yib5paw57K+56We5LiO5Yib5paw6IO95Yqb5Z+55YW7XDwvYVw+Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMzEyMDQ4Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDxcPGEgaHJlZj0nIycgb25jbGljaz0id2luZG93Lm9wZW4oJ2pzeHguYXNweD94aD0yMDE4MTMxMDAzJmpzemdoPTA4MjY3Jnhra2g9KDIwMjAtMjAyMS0yKS0xMzEyMDQ4LTA4MjY3LTEnLCdqc3h4JywndG9vbGJhcj0wLGxvY2F0aW9uPTAsZGlyZWN0b3JpZXM9MCxzdGF0dXM9MCxtZW51YmFyPTAsc2Nyb2xsYmFycz0xLHJlc2l6YWJsZT0wLHdpZHRoPTU0MCxoZWlnaHQ9NDUwLGxlZnQ9MTIwLHRvcD02MCcpIlw+546L6YKm6Z2SXDwvYVw+Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzlkajkuInnrKw3LDjoioJ756ysMy0xN+WRqH07Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDItNjEzOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwyLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMC0wLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDAzLTE3Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDw2MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8NTQ7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDY7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCgyMDIwLTIwMjEtMiktMTMxMjA0OC0wODI2Ny0xOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMzEyMDQ4Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwwODI2Nzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Lq65paH56S+56eR44CB6Im65pyv57G7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzlhazlhbHpgInkv67or747Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOacrOmDqDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Z+656GA6YOoOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47Pj47dDw7bDxpPDI+O2k8Mz47aTw0PjtpPDU+O2k8Nj47aTw3PjtpPDg+O2k8OT47aTwxMD47aTwxMT47aTwxMj47aTwxMz47aTwxND47aTwxNT47aTwxNj47aTwxNz47aTwxOD47aTwxOT47aTwyMD47aTwyMT47aTwyMj47aTwyMz47aTwyNT47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8XDxhIGhyZWY9JyMnIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdrY3h4LmFzcHg/eGg9MjAxODEzMTAwMyZrY2RtPTEzMTIxMjgmeGtraD0oMjAyMC0yMDIxLTIpLTEzMTIxMjgtMDgzNTktMScsJ2tjeHgnLCd0b29sYmFyPTAsbG9jYXRpb249MCxkaXJlY3Rvcmllcz0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTAsd2lkdGg9NTQwLGhlaWdodD00NTAsbGVmdD0xMjAsdG9wPTYwJykiXD7kurrlt6Xmmbrog73mpoLorrpcPC9hXD47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEzMTIxMjg7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFw8YSBocmVmPScjJyBvbmNsaWNrPSJ3aW5kb3cub3BlbignanN4eC5hc3B4P3hoPTIwMTgxMzEwMDMmanN6Z2g9MDgzNTkmeGtraD0oMjAyMC0yMDIxLTIpLTEzMTIxMjgtMDgzNTktMScsJ2pzeHgnLCd0b29sYmFyPTAsbG9jYXRpb249MCxkaXJlY3Rvcmllcz0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTAsd2lkdGg9NTQwLGhlaWdodD00NTAsbGVmdD0xMjAsdG9wPTYwJykiXD7mnY7pm6rpmLNcPC9hXD47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWRqOS4ieesrDksMTDoioJ756ysMy0xN+WRqH07Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDMtNTAzOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwyLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMC0wLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDAzLTE3Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDExOTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8KDIwMjAtMjAyMS0yKS0xMzEyMTI4LTA4MzU5LTE7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEzMTIxMjg7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDA4MzU5Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzoh6rnhLbnp5Hlrabnsbs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWFrOWFsemAieS/ruivvjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85pys6YOoOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzln7rnoYDpg6g7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjs+Pjt0PDtsPGk8Mj47aTwzPjtpPDQ+O2k8NT47aTw2PjtpPDc+O2k8OD47aTw5PjtpPDEwPjtpPDExPjtpPDEyPjtpPDEzPjtpPDE0PjtpPDE1PjtpPDE2PjtpPDE3PjtpPDE4PjtpPDE5PjtpPDIwPjtpPDIxPjtpPDIyPjtpPDIzPjtpPDI1Pjs+O2w8dDxwPHA8bDxUZXh0Oz47bDxcPGEgaHJlZj0nIycgb25jbGljaz0id2luZG93Lm9wZW4oJ2tjeHguYXNweD94aD0yMDE4MTMxMDAzJmtjZG09MTMxMjMwMCZ4a2toPSgyMDIwLTIwMjEtMiktMTMxMjMwMC0xMzExMS0xJywna2N4eCcsJ3Rvb2xiYXI9MCxsb2NhdGlvbj0wLGRpcmVjdG9yaWVzPTAsc3RhdHVzPTAsbWVudWJhcj0wLHNjcm9sbGJhcnM9MSxyZXNpemFibGU9MCx3aWR0aD01NDAsaGVpZ2h0PTQ1MCxsZWZ0PTEyMCx0b3A9NjAnKSJcPuWPkeWxleWei+WbveWutuaUv+ayu+eglOeptlw8L2FcPjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTMxMjMwMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8XDxhIGhyZWY9JyMnIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdqc3h4LmFzcHg/eGg9MjAxODEzMTAwMyZqc3pnaD0xMzExMSZ4a2toPSgyMDIwLTIwMjEtMiktMTMxMjMwMC0xMzExMS0xJywnanN4eCcsJ3Rvb2xiYXI9MCxsb2NhdGlvbj0wLGRpcmVjdG9yaWVzPTAsc3RhdHVzPTAsbWVudWJhcj0wLHNjcm9sbGJhcnM9MSxyZXNpemFibGU9MCx3aWR0aD01NDAsaGVpZ2h0PTQ1MCxsZWZ0PTEyMCx0b3A9NjAnKSJcPum7hOawuOelpVw8L2FcPjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85ZGo5Zub56ysOSwxMOiKgnvnrKwzLTE35ZGofTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MS00MDM7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Mi4wLTAuMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDMtMTc7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDkwOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDw3Mjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTg7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCgyMDIwLTIwMjEtMiktMTMxMjMwMC0xMzExMS0xOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMzEyMzAwOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMzExMTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Lq65paH56S+56eR44CB6Im65pyv57G7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzlhazlhbHpgInkv67or747Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOacrOmDqDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Z+656GA6YOoOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47Pj47dDw7bDxpPDI+O2k8Mz47aTw0PjtpPDU+O2k8Nj47aTw3PjtpPDg+O2k8OT47aTwxMD47aTwxMT47aTwxMj47aTwxMz47aTwxND47aTwxNT47aTwxNj47aTwxNz47aTwxOD47aTwxOT47aTwyMD47aTwyMT47aTwyMj47aTwyMz47aTwyNT47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8XDxhIGhyZWY9JyMnIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdrY3h4LmFzcHg/eGg9MjAxODEzMTAwMyZrY2RtPTEzMTI1NDUmeGtraD0oMjAyMC0yMDIxLTIpLTEzMTI1NDUtMzQwMTUtMScsJ2tjeHgnLCd0b29sYmFyPTAsbG9jYXRpb249MCxkaXJlY3Rvcmllcz0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTAsd2lkdGg9NTQwLGhlaWdodD00NTAsbGVmdD0xMjAsdG9wPTYwJykiXD7llYbkuJrmqKHlvI/liJvmlrDigJTlpKflrabnlJ/liJvkuJrmiJDlip/nmoTllYbkuJrot6/lvoRcPC9hXD47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEzMTI1NDU7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFw8YSBocmVmPScjJyBvbmNsaWNrPSJ3aW5kb3cub3BlbignanN4eC5hc3B4P3hoPTIwMTgxMzEwMDMmanN6Z2g9MzQwMTUmeGtraD0oMjAyMC0yMDIxLTIpLTEzMTI1NDUtMzQwMTUtMScsJ2pzeHgnLCd0b29sYmFyPTAsbG9jYXRpb249MCxkaXJlY3Rvcmllcz0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTAsd2lkdGg9NTQwLGhlaWdodD00NTAsbGVmdD0xMjAsdG9wPTYwJykiXD7lvKDlrZ3mhYhcPC9hXD47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWRqOS4ieesrDksMTDoioJ756ysMy0xN+WRqH07Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDMtNDEwOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwyLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMC0wLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDAzLTE3Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMDA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDY5Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwzMTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8KDIwMjAtMjAyMS0yKS0xMzEyNTQ1LTM0MDE1LTE7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEzMTI1NDU7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDM0MDE1Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzkurrmlofnpL7np5HjgIHoibrmnK/nsbs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWFrOWFsemAieS/ruivvjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85pys6YOoOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzln7rnoYDpg6g7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjs+Pjt0PDtsPGk8Mj47aTwzPjtpPDQ+O2k8NT47aTw2PjtpPDc+O2k8OD47aTw5PjtpPDEwPjtpPDExPjtpPDEyPjtpPDEzPjtpPDE0PjtpPDE1PjtpPDE2PjtpPDE3PjtpPDE4PjtpPDE5PjtpPDIwPjtpPDIxPjtpPDIyPjtpPDIzPjtpPDI1Pjs+O2w8dDxwPHA8bDxUZXh0Oz47bDxcPGEgaHJlZj0nIycgb25jbGljaz0id2luZG93Lm9wZW4oJ2tjeHguYXNweD94aD0yMDE4MTMxMDAzJmtjZG09MTMxMjcxNCZ4a2toPSgyMDIwLTIwMjEtMiktMTMxMjcxNC0wODMyNS0xJywna2N4eCcsJ3Rvb2xiYXI9MCxsb2NhdGlvbj0wLGRpcmVjdG9yaWVzPTAsc3RhdHVzPTAsbWVudWJhcj0wLHNjcm9sbGJhcnM9MSxyZXNpemFibGU9MCx3aWR0aD01NDAsaGVpZ2h0PTQ1MCxsZWZ0PTEyMCx0b3A9NjAnKSJcPueUn+a0u+S4reeahOe7j+a1juWtplw8L2FcPjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTMxMjcxNDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8XDxhIGhyZWY9JyMnIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdqc3h4LmFzcHg/eGg9MjAxODEzMTAwMyZqc3pnaD0wODMyNSZ4a2toPSgyMDIwLTIwMjEtMiktMTMxMjcxNC0wODMyNS0xJywnanN4eCcsJ3Rvb2xiYXI9MCxsb2NhdGlvbj0wLGRpcmVjdG9yaWVzPTAsc3RhdHVzPTAsbWVudWJhcj0wLHNjcm9sbGJhcnM9MSxyZXNpemFibGU9MCx3aWR0aD01NDAsaGVpZ2h0PTQ1MCxsZWZ0PTEyMCx0b3A9NjAnKSJcPuadjuWpt+Wpt1w8L2FcPjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85ZGo5LiJ56ysOSwxMOiKgnvnrKwzLTE35ZGofTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8My00MDI7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Mi4wLTAuMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDMtMTc7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDYwOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwzMzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Mjc7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCgyMDIwLTIwMjEtMiktMTMxMjcxNC0wODMyNS0xOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMzEyNzE0Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwwODMyNTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Lq65paH56S+56eR44CB6Im65pyv57G7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzlhazlhbHpgInkv67or747Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOacrOmDqDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Z+656GA6YOoOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47Pj47dDw7bDxpPDI+O2k8Mz47aTw0PjtpPDU+O2k8Nj47aTw3PjtpPDg+O2k8OT47aTwxMD47aTwxMT47aTwxMj47aTwxMz47aTwxND47aTwxNT47aTwxNj47aTwxNz47aTwxOD47aTwxOT47aTwyMD47aTwyMT47aTwyMj47aTwyMz47aTwyNT47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8XDxhIGhyZWY9JyMnIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdrY3h4LmFzcHg/eGg9MjAxODEzMTAwMyZrY2RtPTEzMTI3NDYmeGtraD0oMjAyMC0yMDIxLTIpLTEzMTI3NDYtMzQwMTktMScsJ2tjeHgnLCd0b29sYmFyPTAsbG9jYXRpb249MCxkaXJlY3Rvcmllcz0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTAsd2lkdGg9NTQwLGhlaWdodD00NTAsbGVmdD0xMjAsdG9wPTYwJykiXD7lpKflrabnlJ/liJvmlrDmgJ3nu7TlkK/okpnigJTigJTov5Hku6PkurrnsbvliJvmlrDlj7LlhbjlnovmoYjkvovliIbmnpBcPC9hXD47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEzMTI3NDY7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFw8YSBocmVmPScjJyBvbmNsaWNrPSJ3aW5kb3cub3BlbignanN4eC5hc3B4P3hoPTIwMTgxMzEwMDMmanN6Z2g9MzQwMTkmeGtraD0oMjAyMC0yMDIxLTIpLTEzMTI3NDYtMzQwMTktMScsJ2pzeHgnLCd0b29sYmFyPTAsbG9jYXRpb249MCxkaXJlY3Rvcmllcz0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTAsd2lkdGg9NTQwLGhlaWdodD00NTAsbGVmdD0xMjAsdG9wPTYwJykiXD7lraPkvJ9cPC9hXD47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWRqOS4ieesrDksMTDoioJ756ysMy0xN+WRqH07Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDMtMzA5Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwyLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMC0wLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDAzLTE3Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMDA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDg1Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxNTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8KDIwMjAtMjAyMS0yKS0xMzEyNzQ2LTM0MDE5LTE7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEzMTI3NDY7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDM0MDE5Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzkurrmlofnpL7np5HjgIHoibrmnK/nsbs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWFrOWFsemAieS/ruivvjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85pys6YOoOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzln7rnoYDpg6g7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjs+Pjt0PDtsPGk8Mj47aTwzPjtpPDQ+O2k8NT47aTw2PjtpPDc+O2k8OD47aTw5PjtpPDEwPjtpPDExPjtpPDEyPjtpPDEzPjtpPDE0PjtpPDE1PjtpPDE2PjtpPDE3PjtpPDE4PjtpPDE5PjtpPDIwPjtpPDIxPjtpPDIyPjtpPDIzPjtpPDI1Pjs+O2w8dDxwPHA8bDxUZXh0Oz47bDxcPGEgaHJlZj0nIycgb25jbGljaz0id2luZG93Lm9wZW4oJ2tjeHguYXNweD94aD0yMDE4MTMxMDAzJmtjZG09MTMxMjc0OCZ4a2toPSgyMDIwLTIwMjEtMiktMTMxMjc0OC0wODM3NS0xJywna2N4eCcsJ3Rvb2xiYXI9MCxsb2NhdGlvbj0wLGRpcmVjdG9yaWVzPTAsc3RhdHVzPTAsbWVudWJhcj0wLHNjcm9sbGJhcnM9MSxyZXNpemFibGU9MCx3aWR0aD01NDAsaGVpZ2h0PTQ1MCxsZWZ0PTEyMCx0b3A9NjAnKSJcPuWEkuWtpuS4reeahOeuoeeQhuS5i+mBk1w8L2FcPjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTMxMjc0ODs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8XDxhIGhyZWY9JyMnIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdqc3h4LmFzcHg/eGg9MjAxODEzMTAwMyZqc3pnaD0wODM3NSZ4a2toPSgyMDIwLTIwMjEtMiktMTMxMjc0OC0wODM3NS0xJywnanN4eCcsJ3Rvb2xiYXI9MCxsb2NhdGlvbj0wLGRpcmVjdG9yaWVzPTAsc3RhdHVzPTAsbWVudWJhcj0wLHNjcm9sbGJhcnM9MSxyZXNpemFibGU9MCx3aWR0aD01NDAsaGVpZ2h0PTQ1MCxsZWZ0PTEyMCx0b3A9NjAnKSJcPuadqOaWh+iKs1w8L2FcPjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85ZGo5LiJ56ysNyw46IqCe+esrDMtMTflkah9Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwzLTMwOTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Mi4wOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwyLjAtMC4wOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwwMy0xNzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTAwOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDw4Njs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTQ7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCgyMDIwLTIwMjEtMiktMTMxMjc0OC0wODM3NS0xOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMzEyNzQ4Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwwODM3NTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Lq65paH56S+56eR44CB6Im65pyv57G7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzlhazlhbHpgInkv67or747Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOacrOmDqDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Z+656GA6YOoOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47Pj47dDw7bDxpPDI+O2k8Mz47aTw0PjtpPDU+O2k8Nj47aTw3PjtpPDg+O2k8OT47aTwxMD47aTwxMT47aTwxMj47aTwxMz47aTwxND47aTwxNT47aTwxNj47aTwxNz47aTwxOD47aTwxOT47aTwyMD47aTwyMT47aTwyMj47aTwyMz47aTwyNT47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8XDxhIGhyZWY9JyMnIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdrY3h4LmFzcHg/eGg9MjAxODEzMTAwMyZrY2RtPTEzMTI3NTYmeGtraD0oMjAyMC0yMDIxLTIpLTEzMTI3NTYtMTAzNjYtMScsJ2tjeHgnLCd0b29sYmFyPTAsbG9jYXRpb249MCxkaXJlY3Rvcmllcz0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTAsd2lkdGg9NTQwLGhlaWdodD00NTAsbGVmdD0xMjAsdG9wPTYwJykiXD7kuZLkuZPnkIPoo4HliKTop4TliJnkuI7oo4HliKTms5VcPC9hXD47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEzMTI3NTY7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFw8YSBocmVmPScjJyBvbmNsaWNrPSJ3aW5kb3cub3BlbignanN4eC5hc3B4P3hoPTIwMTgxMzEwMDMmanN6Z2g9MTAzNjYmeGtraD0oMjAyMC0yMDIxLTIpLTEzMTI3NTYtMTAzNjYtMScsJ2pzeHgnLCd0b29sYmFyPTAsbG9jYXRpb249MCxkaXJlY3Rvcmllcz0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTAsd2lkdGg9NTQwLGhlaWdodD00NTAsbGVmdD0xMjAsdG9wPTYwJykiXD7mqIrlqbdcPC9hXD47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWRqOS4ieesrDksMTDoioJ756ysMy0xN+WRqH07Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEtNTA0Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwyLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMC0wLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDAzLTE3Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDw0MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MzQ7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDY7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCgyMDIwLTIwMjEtMiktMTMxMjc1Ni0xMDM2Ni0xOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMzEyNzU2Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMDM2Njs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Lq65paH56S+56eR44CB6Im65pyv57G7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzlhazlhbHpgInkv67or747Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOacrOmDqDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Z+656GA6YOoOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47Pj47dDw7bDxpPDI+O2k8Mz47aTw0PjtpPDU+O2k8Nj47aTw3PjtpPDg+O2k8OT47aTwxMD47aTwxMT47aTwxMj47aTwxMz47aTwxND47aTwxNT47aTwxNj47aTwxNz47aTwxOD47aTwxOT47aTwyMD47aTwyMT47aTwyMj47aTwyMz47aTwyNT47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8XDxhIGhyZWY9JyMnIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdrY3h4LmFzcHg/eGg9MjAxODEzMTAwMyZrY2RtPTEzMTI3NTcmeGtraD0oMjAyMC0yMDIxLTIpLTEzMTI3NTctMTAzMzctMScsJ2tjeHgnLCd0b29sYmFyPTAsbG9jYXRpb249MCxkaXJlY3Rvcmllcz0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTAsd2lkdGg9NTQwLGhlaWdodD00NTAsbGVmdD0xMjAsdG9wPTYwJykiXD7kuK3lm73nlLvooajnjrDmioDms5VcPC9hXD47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEzMTI3NTc7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFw8YSBocmVmPScjJyBvbmNsaWNrPSJ3aW5kb3cub3BlbignanN4eC5hc3B4P3hoPTIwMTgxMzEwMDMmanN6Z2g9MTAzMzcmeGtraD0oMjAyMC0yMDIxLTIpLTEzMTI3NTctMTAzMzctMScsJ2pzeHgnLCd0b29sYmFyPTAsbG9jYXRpb249MCxkaXJlY3Rvcmllcz0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTAsd2lkdGg9NTQwLGhlaWdodD00NTAsbGVmdD0xMjAsdG9wPTYwJykiXD7lrovkuLlcPC9hXD47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWRqOS4ieesrDksMTDoioJ756ysMy0xN+WRqH07Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDQtMzA1Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwyLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMC0wLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDAzLTE3Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDw1MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8NDM7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDc7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCgyMDIwLTIwMjEtMiktMTMxMjc1Ny0xMDMzNy0xOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMzEyNzU3Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMDMzNzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Lq65paH56S+56eR44CB6Im65pyv57G7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzlhazlhbHpgInkv67or747Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOacrOmDqDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Z+656GA6YOoOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47Pj47dDw7bDxpPDI+O2k8Mz47aTw0PjtpPDU+O2k8Nj47aTw3PjtpPDg+O2k8OT47aTwxMD47aTwxMT47aTwxMj47aTwxMz47aTwxND47aTwxNT47aTwxNj47aTwxNz47aTwxOD47aTwxOT47aTwyMD47aTwyMT47aTwyMj47aTwyMz47aTwyNT47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8XDxhIGhyZWY9JyMnIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdrY3h4LmFzcHg/eGg9MjAxODEzMTAwMyZrY2RtPTEzMTI3NTgmeGtraD0oMjAyMC0yMDIxLTIpLTEzMTI3NTgtMTAzNjktMScsJ2tjeHgnLCd0b29sYmFyPTAsbG9jYXRpb249MCxkaXJlY3Rvcmllcz0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTAsd2lkdGg9NTQwLGhlaWdodD00NTAsbGVmdD0xMjAsdG9wPTYwJykiXD7oqIDor63ooajovr7nmoToibrmnK9cPC9hXD47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEzMTI3NTg7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFw8YSBocmVmPScjJyBvbmNsaWNrPSJ3aW5kb3cub3BlbignanN4eC5hc3B4P3hoPTIwMTgxMzEwMDMmanN6Z2g9MTAzNjkmeGtraD0oMjAyMC0yMDIxLTIpLTEzMTI3NTgtMTAzNjktMScsJ2pzeHgnLCd0b29sYmFyPTAsbG9jYXRpb249MCxkaXJlY3Rvcmllcz0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTAsd2lkdGg9NTQwLGhlaWdodD00NTAsbGVmdD0xMjAsdG9wPTYwJykiXD7kuKXkvbPmhadcPC9hXD47Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWRqOS4ieesrDcsOOiKgnvnrKwzLTE35ZGofTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MS01MDU7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Mi4wLTAuMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDMtMTc7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDQ1Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDw0NDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8KDIwMjAtMjAyMS0yKS0xMzEyNzU4LTEwMzY5LTE7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEzMTI3NTg7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEwMzY5Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzkurrmlofnpL7np5HjgIHoibrmnK/nsbs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWFrOWFsemAieS/ruivvjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85pys6YOoOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzln7rnoYDpg6g7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjs+Pjt0PDtsPGk8Mj47aTwzPjtpPDQ+O2k8NT47aTw2PjtpPDc+O2k8OD47aTw5PjtpPDEwPjtpPDExPjtpPDEyPjtpPDEzPjtpPDE0PjtpPDE1PjtpPDE2PjtpPDE3PjtpPDE4PjtpPDE5PjtpPDIwPjtpPDIxPjtpPDIyPjtpPDIzPjtpPDI1Pjs+O2w8dDxwPHA8bDxUZXh0Oz47bDxcPGEgaHJlZj0nIycgb25jbGljaz0id2luZG93Lm9wZW4oJ2tjeHguYXNweD94aD0yMDE4MTMxMDAzJmtjZG09MTMxMjc2NSZ4a2toPSgyMDIwLTIwMjEtMiktMTMxMjc2NS0xMzI3OC0xJywna2N4eCcsJ3Rvb2xiYXI9MCxsb2NhdGlvbj0wLGRpcmVjdG9yaWVzPTAsc3RhdHVzPTAsbWVudWJhcj0wLHNjcm9sbGJhcnM9MSxyZXNpemFibGU9MCx3aWR0aD01NDAsaGVpZ2h0PTQ1MCxsZWZ0PTEyMCx0b3A9NjAnKSJcPuS4reWbveaVmeiCsuWPslw8L2FcPjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTMxMjc2NTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8XDxhIGhyZWY9JyMnIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdqc3h4LmFzcHg/eGg9MjAxODEzMTAwMyZqc3pnaD0xMzI3OCZ4a2toPSgyMDIwLTIwMjEtMiktMTMxMjc2NS0xMzI3OC0xJywnanN4eCcsJ3Rvb2xiYXI9MCxsb2NhdGlvbj0wLGRpcmVjdG9yaWVzPTAsc3RhdHVzPTAsbWVudWJhcj0wLHNjcm9sbGJhcnM9MSxyZXNpemFibGU9MCx3aWR0aD01NDAsaGVpZ2h0PTQ1MCxsZWZ0PTEyMCx0b3A9NjAnKSJcPuW8oOW/oOaEj1w8L2FcPjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85ZGo5LiJ56ysOSwxMOiKgnvnrKwzLTE35ZGofTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8My02MDM7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Mi4wLTAuMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDMtMTc7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDEwMDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8NTM7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDQ3Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwoMjAyMC0yMDIxLTIpLTEzMTI3NjUtMTMyNzgtMTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTMxMjc2NTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTMyNzg7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOS6uuaWh+ekvuenkeOAgeiJuuacr+exuzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85YWs5YWx6YCJ5L+u6K++Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzmnKzpg6g7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWfuuehgOmDqDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+Oz4+O3Q8O2w8aTwyPjtpPDM+O2k8ND47aTw1PjtpPDY+O2k8Nz47aTw4PjtpPDk+O2k8MTA+O2k8MTE+O2k8MTI+O2k8MTM+O2k8MTQ+O2k8MTU+O2k8MTY+O2k8MTc+O2k8MTg+O2k8MTk+O2k8MjA+O2k8MjE+O2k8MjI+O2k8MjM+O2k8MjU+Oz47bDx0PHA8cDxsPFRleHQ7PjtsPFw8YSBocmVmPScjJyBvbmNsaWNrPSJ3aW5kb3cub3Blbigna2N4eC5hc3B4P3hoPTIwMTgxMzEwMDMma2NkbT0xMzEyNzY4Jnhra2g9KDIwMjAtMjAyMS0yKS0xMzEyNzY4LTExMTY1LTEnLCdrY3h4JywndG9vbGJhcj0wLGxvY2F0aW9uPTAsZGlyZWN0b3JpZXM9MCxzdGF0dXM9MCxtZW51YmFyPTAsc2Nyb2xsYmFycz0xLHJlc2l6YWJsZT0wLHdpZHRoPTU0MCxoZWlnaHQ9NDUwLGxlZnQ9MTIwLHRvcD02MCcpIlw+5Lya5bGV6Iux6K+tXDwvYVw+Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMzEyNzY4Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDxcPGEgaHJlZj0nIycgb25jbGljaz0id2luZG93Lm9wZW4oJ2pzeHguYXNweD94aD0yMDE4MTMxMDAzJmpzemdoPTExMTY1Jnhra2g9KDIwMjAtMjAyMS0yKS0xMzEyNzY4LTExMTY1LTEnLCdqc3h4JywndG9vbGJhcj0wLGxvY2F0aW9uPTAsZGlyZWN0b3JpZXM9MCxzdGF0dXM9MCxtZW51YmFyPTAsc2Nyb2xsYmFycz0xLHJlc2l6YWJsZT0wLHdpZHRoPTU0MCxoZWlnaHQ9NDUwLGxlZnQ9MTIwLHRvcD02MCcpIlw+6Jab5Lic5qKFXDwvYVw+Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzlkajkuInnrKw5LDEw6IqCe+esrDMtMTflkah9Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwzLTQwMzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Mi4wOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwyLjAtMC4wOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwwMy0xNzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MTAwOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDw1NTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8NDU7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCgyMDIwLTIwMjEtMiktMTMxMjc2OC0xMTE2NS0xOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMzEyNzY4Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxMTE2NTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Lq65paH56S+56eR44CB6Im65pyv57G7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzlhazlhbHpgInkv67or747Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOacrOmDqDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Jm5ic3BcOzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85Z+656GA6YOoOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwmbmJzcFw7Oz4+Oz47Oz47Pj47Pj47Pj47dDxAMDxwPHA8bDxQYWdlQ291bnQ7XyFJdGVtQ291bnQ7XyFEYXRhU291cmNlSXRlbUNvdW50O0RhdGFLZXlzOz47bDxpPDE+O2k8MT47aTwxPjtsPD47Pj47Pjs7Ozs7Ozs7Ozs+O2w8aTwwPjs+O2w8dDw7bDxpPDE+Oz47bDx0PDtsPGk8MD47aTwxPjtpPDI+O2k8Mz47aTw0PjtpPDU+O2k8Nj47aTw3PjtpPDg+O2k8OT47aTwxMD47aTwxMT47aTwxMj47aTwxMz47aTwxND47aTwxNT47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8KDIwMjAtMjAyMS0yKS0xMzEyNjk3LTA1MDk5LTE7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOmihuWvvOWKm+S4jumrmOaViOiDvee7hOe7hzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8572R57uc5ZCN5biI77yI5pm65oWn5qCR77yJOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDwyLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIuMC0wLjA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDAzLTE3Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzmnKzpg6g7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDA7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOS6uuaWh+ekvuenkeOAgeiJuuacr+exuzs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85YWs5YWx6YCJ5L+u6K++Oz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzmnKzpg6g7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPCZuYnNwXDs7Pj47Pjs7Pjs+Pjs+Pjs+Pjt0PEAwPDs7Ozs7Ozs7Ozs+Ozs+Oz4+Oz4+O2w8a2NtY0dyaWQ6X2N0bDI6eGs7a2NtY0dyaWQ6X2N0bDI6amM7a2NtY0dyaWQ6X2N0bDM6eGs7a2NtY0dyaWQ6X2N0bDM6amM7a2NtY0dyaWQ6X2N0bDQ6eGs7a2NtY0dyaWQ6X2N0bDQ6amM7a2NtY0dyaWQ6X2N0bDU6eGs7a2NtY0dyaWQ6X2N0bDU6amM7a2NtY0dyaWQ6X2N0bDY6eGs7a2NtY0dyaWQ6X2N0bDY6amM7a2NtY0dyaWQ6X2N0bDc6eGs7a2NtY0dyaWQ6X2N0bDc6amM7a2NtY0dyaWQ6X2N0bDg6eGs7a2NtY0dyaWQ6X2N0bDg6amM7a2NtY0dyaWQ6X2N0bDk6eGs7a2NtY0dyaWQ6X2N0bDk6amM7a2NtY0dyaWQ6X2N0bDEwOnhrO2tjbWNHcmlkOl9jdGwxMDpqYztrY21jR3JpZDpfY3RsMTE6eGs7a2NtY0dyaWQ6X2N0bDExOmpjO2tjbWNHcmlkOl9jdGwxMjp4aztrY21jR3JpZDpfY3RsMTI6amM7a2NtY0dyaWQ6X2N0bDEzOnhrO2tjbWNHcmlkOl9jdGwxMzpqYztrY21jR3JpZDpfY3RsMTQ6eGs7a2NtY0dyaWQ6X2N0bDE0OmpjOz4+4NXD4K1LjIUP18S0da2JqDoWA1k=',
                   'ddl_kcxz': '',
                   'ddl_ywyl': '有'.encode('gb2312'),
                   'ddl_kcgs': '',
                   'ddl_sksj': '',
                   'ddl_xqbs': 1,
                   'TextBox1': '',
                   'Button1': '提交'.encode('gb2312'),
                   strr: 'on'}
        xkResult = session.post(url_xxk, headers=headers_0, data=xxkData)
        # list = re.findall('退选', xkResult.text)
        # # print(len(list))
        # if(len(list)>2):
        #     print('选课成功')

        bs_xxk = BeautifulSoup(xkResult.text, 'lxml')
        bs_xxk = bs_xxk.find(id='DataGrid2')
        tmp = bs_xxk.select('tr')

        # 选修课列表
        xxkListTmp = []
        for item in tmp:
            td_tmp = item.findAll('td')
            for index, value in enumerate(td_tmp):
                a = value.find('input')
                if a is not None:
                    a = "<td>" + a['name'] + "</td>"
                    td_tmp[index] = a
                a = value.find('a')
                if a is not None:
                    a = "<td>" + a.string + "</td>"
                    td_tmp[index] = a
            td_tmp = str(td_tmp)
            td_tmp = re.findall('<td>(.*?)</td>', td_tmp)
            xxkListTmp.append(td_tmp)

        xxkList = []
        for item in xxkListTmp:
            xxk = {"id": item[0], "jc": item[1], "courseName": item[2], "courseCode": item[3],
                   "teacherName": item[4], "courseTime": item[5], "coursePosition": item[6],
                   "numOfPeople": item[11], "numOfFree": item[12]}
            # print(xxk)
            xxkList.append(xxk)

        if (len(xxkList) > 1):
            print('选课成功')
            print('已选课程：')
            print(xxkList)

        # 培养计划
        # url_N121607 = self.url_head + 'pyjh.aspx?xh=' + self.xh + '&xm=' + xm + '&gnmkdm=N121607'
        # bbb = session.get(url_N121607, headers=headers_0)
        # print('aaa')

        # 课表 ================================================================================================

    def get_table_time(self, xm):
        url_N121603 = self.url_head + 'xskbcx.aspx?xh=' + self.xh + '&xm=' + xm + '&gnmkdm=N121603'
        resp_N121603 = session.get(url_N121603, headers=headers_0)
        """提取相关信息"""
        bs = BeautifulSoup(resp_N121603.text, 'lxml')
        # print(bs)

        # 姓名
        name = bs.find(id='Label6')
        name = name.string[3:]

        # 学院
        college = bs.find(id='Label7')
        college = college.string[3:]

        # 专业
        major = bs.find(id='Label8')
        major = major.string[3:]

        # 课表
        t_list = bs.find_all(rowspan='2', align='Center')

        # 正则表达式提取信息，创建课程表字典，并嵌套到列表中
        courses = []
        i = 0

        config = {
            '周一': 0, '周二': 1, '周三': 2, '周四': 3, '周五': 4, '周六': 5, '周日': 6,
            '1,2': 0, '3,4': 1, '5,6': 2, '7,8': 3, '9,10': 4
        }

        for item in t_list:
            item = str(item)
            matchobj = re.findall('(>.*?<)', item)
            current_course = {'Lesson': (matchobj[0])[1:-1], 'Time': (matchobj[1])[1:-1],
                              'Teacher': (matchobj[2])[1:-1], 'Position': (matchobj[3])[1:-1]}
            exec('course_' + str(i) + ' = current_course')
            exec('courses.append(' + 'course_' + str(i) + ')')
            i = i + 1

        for course in courses:
            course['x'] = config[course['Time'][3:6]]
            course['y'] = config[course['Time'][0:2]]

            if '单周' in course['Time']:
                course['type'] = "odd"
            elif '双周' in course['Time']:
                course['type'] = "even"
            else:
                course['type'] = "primary"
            tmp = re.findall('{第(.*?)周', course['Time'])
            weeks = tmp[0].split('-')
            course['startWeek'] = weeks[0]
            course['endWeek'] = weeks[1]

        # 返回一个包含姓名，学院，专业，课表的列表
        info = {
            'name': name,
            'college': college,
            'major': major,
            'courses': courses
        }
        print(courses)
